﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace PServiceBus.MessageProxy {
    public static class AttributeExtension {
        public static TAttribute GetAttribute<TAttribute>(this MethodInfo method) where TAttribute : Attribute {
            return method.GetAttributes<TAttribute>().FirstOrDefault();
        }

        public static IEnumerable<TAttribute> GetAttributes<TAttribute>(this MethodInfo method) where TAttribute : Attribute {
            return method.GetCustomAttributes(typeof(TAttribute), false).Cast<TAttribute>();
        }

        public static TAttribute GetAttribute<TAttribute>(this ParameterInfo param) where TAttribute : Attribute {
            return param.GetAttributes<TAttribute>().FirstOrDefault();
        }

        public static IEnumerable<TAttribute> GetAttributes<TAttribute>(this ParameterInfo param) where TAttribute : Attribute {
            return param.GetCustomAttributes(typeof(TAttribute), false).Cast<TAttribute>();
        }

        public static IEnumerable<TAttribute> GetAttributes<TAttribute>(this Type type) where TAttribute : Attribute {
            return type.GetCustomAttributes(typeof(TAttribute), false).Cast<TAttribute>();
        }

        public static TAttribute GetAttribute<TAttribute>(this Type type) where TAttribute : Attribute {
            return type.GetAttributes<TAttribute>().FirstOrDefault();
        }
    }
}
